package Stack;

import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-09-04
 * Time: 10:49
 */
public class MinStack {
    //创建两个桟：一个最普通栈 + 一个最小桟
    public Stack<Integer> stack;
    public Stack<Integer> Minstack;
    public MinStack() {
        stack = new Stack<>();
        Minstack = new Stack<>();
    }

    /**
     * 入桟：
     * 1. 普通桟一定要放，最小桟放的原则：
     *   如果最小桟是空的，就要放
     *   如果最小桟的桟顶元素大于当前的元素，放
     *   如果最小桟的桟顶元素等于当前的元素，放
     * @param val
     */
    public void push(int val) {
        stack.push(val);
        if(Minstack.empty()) {
            Minstack.push(val);
        } else {
            int peekVal = Minstack.peek();
            if(val <= peekVal) {
                Minstack.push(val);
            }
        }
    }

    /**
     * 出栈：
     * 需要判断 出栈的元素 和 桟顶元素 是否相同，相同则最小桟也要出栈
     */
    public void pop() {
        if(stack.empty()) {
            return;
        }
        int popVal = stack.pop();
        if(popVal == Minstack.peek()) {
            Minstack.pop();
        }
    }

    //取出栈顶元素：
    public int top() {
        if(stack.empty()) {
            return -1;
        }
        return stack.peek();
    }

    //取出最小栈的栈顶元素：
    public int getMin() {
        if(stack.empty()) {
            return -1;
        }
        return Minstack.peek();
    }
}
